____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―
Solidity
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
top
Solidity ist eine objektorientierte, anwendungsspezifische hΓΆhere Programmiersprache zum Entwickeln von Smart Contracts fΓΌr Blockchain-Plattformen wie Ethereum oder Tron, die von C++, Python und JavaScript beeinflusst ist.cite-ref-0-1-0[1]cite-ref-2[2]
Contents
β’ Geschichte
β’ Beschreibung
β’ Kritik
β’ Weblinks
β’ Einzelnachweise
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Geschichte
Die erste Spezifikation von Solidity wurde im August 2014 von Gavin Wood ausgearbeitet.cite-ref-3[3] Die weitere Entwicklung ΓΌbernahm die Ethereum Foundation unter Leitung von Christian Reitwiessner. Solidity ist die 4. fΓΌr die Ethereum Virtual Machine (EVM) entwickelte Sprache β nach der Go-Γ€hnlichen Sprache Mutan, LLL β einer Lisp-artigen Sprache β sowie der Python-Γ€hnlichen Sprache Serpent. Solidity ist die bedeutendste und am stΓ€rksten entwickelte dieser Sprachen. Mutan wurde 2015 zugunsten von Solidity abgesetztcite-ref-4[4] und auch LLL wird wenig verwendet.cite-ref-5[5] Serpent wird aufgrund von Sicherheitsproblemen nicht mehr weiterentwickelt und wurde durch den Nachfolger Vyper ersetzt.cite-ref-6[6]
Beschreibung
Solidity ist eine auf JavaScript basierende, statisch typisierte Programmiersprache, die entwickelt wurde, um Smart Contracts fΓΌr die Ethereum Virtual Machine (EVM) zu programmieren.cite-ref-0-1-1[1] Solidity-Contracts kΓΆnnen in Bytecode kompiliert werden, der von der EVM ausgefΓΌhrt werden kann, um dann (zum Beispiel ΓΌber die Ethereum-Geth-Konsole) in die Ethereum-Blockchain hochgeladen zu werden. Es gibt mehrere Methoden, um Solidity-Code zu kompilieren, zum Beispiel ΓΌber den Online-Compiler,cite-ref-7[7] den Kommandozeilen-Solidity-Compiler solc oder den in die Ethereum-IDE Mix eingebauten Compiler.cite-ref-8[8]
Die Solidity-Syntax ist stark an die ECMAScript-Syntax angelehnt, um Webentwicklern den Einstieg in die Smart-Contract-Entwicklung zu erleichtern; im Unterschied zu ECMAScript ist sie aber statisch typisiert und unterstΓΌtzt variadische RΓΌckgabewerte. Im Vergleich mit den zuvor bestehenden, vergleichbaren Sprachen (LLL, Serpent, Mutan) unterstΓΌtzt Solidity komplexe Variablentypen wie hierarchische Mappings und Structs, die auch verschachtelt werden kΓΆnnen, sowie Vererbung fΓΌr Contracts. Es wurde auch ein Application Binary Interface (ABI) spezifiziert, sodass eine Interaktion externer Applikationen und Libraries (zum Beispiel Web3.js) mit Ethereum-Contracts mΓΆglich ist.cite-ref-9[9]
Beispielcode fΓΌr einen in Solidity geschriebenen Contract:cite-ref-10[10]
contract TestCoin {
// Das SchlΓΌsselwort "public" erlaubt es auch anderen Smart Contracts, die Variable auszulesen.
// Diese Variable hat den Typ "address" und steht fΓΌr die Adresse eines Ethereum Accounts.
address public minter;
mapping (address => uint) public balances;
// Events erlauben es Ethereum-Clients, auf Ereignisse des Contracts zu reagieren.
event Sent(address from, address to, uint amount);
// Die Funktion mit demselben Namen wie der Smart Contract ist der Konstruktor.
// Diese Funktion wird ein einziges Mal bei der Erstellung des Contracts aufgerufen.
function TestCoin() {
minter = msg.sender;
}
// Mit dieser Funktion kann der "minter" Ethereum Account anderen Accounts einen beliebigen
// Betrag des "TestCoin" ΓΌberweisen.
function mint(address receiver, uint amount) {
if (msg.sender != minter) return;
balances[receiver] += amount;
}
// Diese Funktion erlaubt es Ethereum-Accounts, sich gegenseitig TestCoin zu ΓΌberweisen.
function send(address receiver, uint amount) {
if (balances[msg.sender] < amount) return;
balances[msg.sender] -= amount;
balances[receiver] += amount;
Sent(msg.sender, receiver, amount);
}
}
Kritik
Solidity geriet besonders nach dem medial stark aufgegriffenen Hack von The DAO, aber auch durch das Entdecken weiterer Exploits, wegen ernsthafter Sicherheitsprobleme in die Kritik.cite-ref-11[11]cite-ref-12[12] Es wird unter anderem kritisiert, dass Solidity zu permissiv ist und auf JavaScript-Γ€hnlichen Konzepten basiert, anstatt auf wissenschaftlicher Forschung zum Thema Formale Sprachen fΓΌr Contracts aufzubauen.cite-ref-13[13]cite-ref-14[14]
Bekannte Anwendungen
Weblinks
β’ Markus VΓΆlter: Ethereum und Solidity Omega Tau Folge 265 (Interview mit Solidity-Entwickler Christian Reitwiessner, 2017, 2h 20min)
Einzelnachweise
cite-note-0-11. β Solidity β Solidity 0.2.0 documentation. In: solidity.readthedocs.io. Abgerufen am 9. September 2016.
cite-note-22. β Solidity β Solidity 0.8.7 documentation. Abgerufen am 4. August 2021.
cite-note-33. β Benoit Schweblin: StackEdit Viewer. In: stackedit.io. Archiviert vom Original (nicht mehr online verfΓΌgbar) am 1. April 2016; abgerufen am 9. September 2016.
cite-note-44. β Mutan FAQ. Abgerufen am 11. September 2016.
cite-note-55. β Is LLL still used as language? In: ethereum.stackexchange.com. Abgerufen am 11. September 2016.
cite-note-66. β Serpent auf Github. Abgerufen am 19. September 2018.
cite-note-77. β Solidity realtime compiler and runtime. In: ethereum.github.io. Abgerufen am 12. September 2016.
cite-note-88. β Mix IDE. Abgerufen am 12. September 2016.
cite-note-99. β Ethereum Contract ABI. Abgerufen am 12. September 2016.
cite-note-1010. β Introduction to Smart Contracts. Abgerufen am 12. September 2016.
cite-note-1111. β The DAO's Community: The DAO - Home. In: daohub.org. Archiviert vom Original (nicht mehr online verfΓΌgbar) am 22. Juni 2016; abgerufen am 12. September 2016.
cite-note-1212. β heise online: Nach dem DAO-Hack: Ethereum glΓΌckt der harte Fork. In: heise online. Abgerufen am 12. September 2016.
cite-note-1313. β Muneeb Ali: Solarstorm: A security exploit with Ethereumβs Solidity language, not just the DAO. In: Muneeb's Blog. 21. Juni 2016, abgerufen am 22. Januar 2023.
cite-note-1414. β Why Solidity isnβt solid. In: Blockstack Blog. 20. Juni 2016, abgerufen am 12. September 2016.